package pack;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Gui implements ActionListener {
JFrame frame = new JFrame("Shop");
JPanel shopPanel = new JPanel();
JPanel countersPanel = new JPanel();
JPanel infoPanel = new JPanel();
JPanel openPanel = new JPanel();
private int openCounters;
private ArrayList<Counter> counters;
private Scheduler scheduler = new Scheduler();
public Gui(int openCounters, Scheduler scheduler) {
this.scheduler = scheduler;
this.openCounters = openCounters;
counters = new ArrayList<Counter>();
frame.setSize(700, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
infoPanel.setLayout(new GridLayout(openCounters, 1));
countersPanel.setLayout(new GridLayout(openCounters, 1));
openPanel.setLayout(new GridLayout(openCounters, 1));
shopPanel.setLayout(new GridLayout(1, 3));
for (int i = 0; i < openCounters; i++) {
JLabel label = new JLabel(" Counter " + i);
infoPanel.add(label);
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("close" + i);
closeButton.addActionListener(this);
JPanel buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(closeButton);
openPanel.add(buttonPanel);
}
shopPanel.add(openPanel);
shopPanel.add(infoPanel);
shopPanel.add(countersPanel);
frame.add(shopPanel);
}
public void displayData(ArrayList<Counter> counters) {
this.counters = counters;
countersPanel.removeAll();
countersPanel.revalidate();
for (int i = 0; i < counters.size(); i++) {
JList<Client> clients = new JList<Client>(counters.get(i).getClientsArray());
JScrollPane clientsScroll = new JScrollPane(clients);
countersPanel.add(clientsScroll);
}
countersPanel.repaint();
countersPanel.revalidate();
}
public void displayConclusions() {
JOptionPane.showMessageDialog(frame,
"Average waiting time " + scheduler.getAverageWaitingTime() + "\n" + "Average serving time "
+ scheduler.getAverageServingTime() + "\n" + "\n" + "Peak hour " + scheduler.getPeakHour());
}
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < openCounters; i++) {
if (e.getActionCommand().equals("close" + i)) {
System.out.println("button " + i);
counters.get(i).setClosed(true);
BlockingQueue<Client> clients = new LinkedBlockingQueue<Client>();
clients = counters.get(i).getClientsList();
while (clients.size() > 0) {
for (Client c : clients) {
scheduler.sendClientToCounter(c, c.getArrivalTime());
}
}
}
}
}
}